Skip to content

test(spark): characterize SparkToArrowSchema Spark-to-Arrow conversion#8782

Merged
robert3005 merged 1 commit into
vortex-data:developfrom
jackylee-ch:spark-to-arrow-schema-tests
Jul 16, 2026
Merged

test(spark): characterize SparkToArrowSchema Spark-to-Arrow conversion#8782
robert3005 merged 1 commit into
vortex-data:developfrom
jackylee-ch:spark-to-arrow-schema-tests

Conversation

@jackylee-ch

Copy link
Copy Markdown
Contributor

Rationale for this change

SparkToArrowSchema (java/vortex-spark/src/main/java/dev/vortex/spark/write/SparkToArrowSchema.java)
converts Spark SQL schemas to Arrow schemas on the write path, and currently has no
test coverage. It is the mirror image of ArrowUtils on the read path, which gained
characterization tests in #8770. Like that mapping table, this conversion is exactly the
kind of code that regresses quietly: a wrong bit width, a dropped timezone, or lost
nullability would silently corrupt written files rather than fail loudly.

What changes are included in this PR?

A new SparkToArrowSchemaTest that characterizes the conversion:

  • Primitive mappings: BooleanBool; Byte/Short/Integer/Long → signed Int
    8/16/32/64; Float/DoubleSINGLE/DOUBLE floating point; StringUtf8;
    BinaryBinary; Decimal → 128-bit Arrow Decimal preserving precision and
    scale; DateDate(DAY); TimestampTimestamp(MICROSECOND, "UTC") and
    TimestampNTZTimestamp(MICROSECOND, null).
  • Schema structure: field names and ordering are preserved; field-level nullability
    is carried over to the Arrow field.
  • Nested types: StructType converts to a Struct field with recursively converted
    children (including per-child nullability); ArrayType converts to a List whose
    element child carries containsNull.
  • Rejected types: unsupported Spark types (e.g. CalendarIntervalType) raise
    UnsupportedOperationException naming the offending type.

This is a test-only change; no production code is modified. 12 tests, all passing
locally (:vortex-spark_2.12:test --tests 'dev.vortex.spark.write.SparkToArrowSchemaTest').

What APIs are changed? Are there any user-facing changes?

None. No production code or public API is touched.

@jackylee-ch jackylee-ch force-pushed the spark-to-arrow-schema-tests branch from 071404d to fb19e1d Compare July 16, 2026 09:15
robert3005 pushed a commit that referenced this pull request Jul 16, 2026
…materialization (#8783)

## Rationale for this change

`PartitionPathUtils`
(`java/vortex-spark/src/main/java/dev/vortex/spark/read/PartitionPathUtils.java`)
discovers Hive-style partition columns from file paths and materializes
them as constant
column vectors on the read path. It currently has no test coverage,
despite encoding
several subtle behaviors: URL decoding of keys and values, the
`__HIVE_DEFAULT_PARTITION__` null sentinel, first-`=` splitting, type
inference
precedence (int → long → double → boolean → string), and per-type
parsing into
`ConstantColumnVector`. This continues the characterization-test series
from #8770
(read-path `ArrowUtils`) and #8782 (write-path `SparkToArrowSchema`).

## What changes are included in this PR?

A new `PartitionPathUtilsTest` covering all three public methods:

- **`parsePartitionValues`**: extracts ordered `key=value` segments from
paths; ignores
segments without the `key=value` shape (including empty keys or values);
URL-decodes
both keys and values (`New%20York` → `New York`); splits on the first
`=` so values
  may themselves contain `=`.
- **`inferPartitionColumnType`**: infers `Integer` for int-width values,
`Long` for
wider integrals, `Double` for decimal-point values, `Boolean` for
case-insensitive
  true/false, and falls back to `String` (including for null and the
  `__HIVE_DEFAULT_PARTITION__` sentinel).
- **`createConstantVector`**: null and the Hive default-partition
sentinel produce null
vectors; string/int/long/short/byte/boolean/float/double values are
parsed into their
target types; `DateType` parses as days-since-epoch (int) and both
timestamp types as
micros-since-epoch (long); unrecognized target types fall back to UTF8
strings.

This is a **test-only** change; no production code is modified. 19
tests, all passing
locally (`:vortex-spark_2.12:test --tests
'dev.vortex.spark.read.PartitionPathUtilsTest'`).

## What APIs are changed? Are there any user-facing changes?

None. No production code or public API is touched.

Signed-off-by: jackylee <qcsd2011@gmail.com>
@robert3005 robert3005 added the changelog/chore A trivial change label Jul 16, 2026
@robert3005 robert3005 merged commit 8d52fff into vortex-data:develop Jul 16, 2026
88 of 91 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/chore A trivial change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants